import 'dart:convert';
import 'package:logger/logger.dart';

// 自定义日志打印器，只打印 JSON 数据，并且不截断
class JsonLogPrinter extends LogPrinter {
  @override
  List<String> log(LogEvent event) {
    var message = event.message;

    // 检查消息是否是 JSON 格式的字符串或可以被转换为 JSON
    String formattedMessage;
    if (message is Map || message is List) {
      formattedMessage = const JsonEncoder.withIndent('  ').convert(message); // 格式化 JSON
    } else {
      formattedMessage = message.toString(); // 直接打印非 JSON 的消息
    }

    return [formattedMessage]; // 返回格式化后的消息
  }
}

// 自定义输出，避免日志截断，分块输出超过 1024 字符的内容
class NoClipOutput extends LogOutput {
  static const int chunkSize = 800; // 每次打印的字符数，防止被截断

  @override
  void output(OutputEvent event) {
    for (var line in event.lines) {
      _printLong(line);
    }
  }

  // 分块打印长日志，避免超过 1024 字符被截断
  void _printLong(String log) {
    if (log.length <= chunkSize) {
      print(log); // 长度在限制范围内，直接打印
    } else {
      // 分块打印日志
      for (int i = 0; i < log.length; i += chunkSize) {
        print(log.substring(i, i + chunkSize > log.length ? log.length : i + chunkSize));
      }
    }
  }
}

// 初始化 Logger
final Logger logger = Logger(
  printer: JsonLogPrinter(), // 使用自定义 JSON 打印器
  output: NoClipOutput(), // 使用自定义不截断输出
);
